// TypeScript结构化类型系统的基本规则是，如果x要兼容y，那么y至少具有与x相同的属性。比如：
interface Named {
    name: string;
}

let x: Named;
// y's inferred type is { name: string; location: string; }
let y = { name: 'Alice', location: 'Seattle' };
x = y;

// 检查函数参数时使用相同的规则
function greet(n: Named) {
    alert('Hello, ' + n.name);
}
greet(y); // OK



// 比较两个函数
// 要查看 a 是否能赋值给 b
let a = (a: number) => 0;
let b = (b: number, s: string) => 0;

b = a; // OK
// a = b; // Error


